﻿''' <summary>
''' Noch was allgemeines... eigentlich koennten wir das auch (teilweise) mit den KOs ueberschreiben.. das eben nicht jeder KO das gleiche sagt, sondern, dass sie sich eben individuell freuen.
''' </summary>
''' <remarks></remarks>
Class KI_Sprache
    Public Enum KILaunen
        Freude
        Trauer
    End Enum
    Shared KI_Sieg As New Stack(Of String)
    Shared KI_Niederlage As New Stack(Of String)
    Shared KI_Spott As New Stack(Of String)
    Shared KI_Betteln As New Stack(Of String)
    Shared KI_Freude As New Stack(Of String)
    Shared KI_Trauer As New Stack(Of String)


    ''' <summary>
    ''' Initialisiert die sprach KI mit der aktuellen sprache aus 
    ''' </summary>
    ''' <remarks></remarks>
    Public Shared Sub Ini()
        KI_Sieg.Clear()
        KI_Niederlage.Clear()
        KI_Spott.Clear()
        KI_Betteln.Clear()
        KI_Freude.Clear()
        KI_Trauer.Clear()

        Dim AktuellerText As Stack(Of String) = KI_Sieg

        Dim Sprache As Sprachen = DataSettings.Sprache
        Dim Dat As String = DataSettings.Resourcenpfad + "Language\" + Sprache.ToString + "\KI.txt"
        If My.Computer.FileSystem.FileExists(Dat) Then
            'Na gut... dann laden wir mal die Texte..
            Using strR As New IO.StreamReader(Dat, Hauptmenue.Codierung, True)
                While Not strR.EndOfStream
                    Dim z As String = strR.ReadLine
                    If z.Contains("//") Then z = z.Remove(z.IndexOf("//"))
                    z = z.Trim
                    If z = "" Then Continue While

                    If z.ToLower = "Sieg:".ToLower Then
                        AktuellerText = KI_Sieg
                        Continue While
                    End If
                    If z.ToLower = "Niederlage:".ToLower Then
                        AktuellerText = KI_Niederlage
                        Continue While
                    End If
                    If z.ToLower = "Spott:".ToLower Then
                        AktuellerText = KI_Spott
                        Continue While
                    End If
                    If z.ToLower = "Betteln:".ToLower Then
                        AktuellerText = KI_Betteln
                        Continue While
                    End If
                    If z.ToLower = "Freude:".ToLower Then
                        AktuellerText = KI_Freude
                        Continue While
                    End If
                    If z.ToLower = "Trauer:".ToLower Then
                        AktuellerText = KI_Trauer
                        Continue While
                    End If

                    AktuellerText.Push(z)
                End While
            End Using
        End If
    End Sub

    Public Shared Sub Sieg(ByVal Spieler As ObjektSpieler)
        Dim KI_Texte As Stack(Of String) = KI_Sieg
        If KI_Texte.Count > 0 Then
            'immerhin gibt es etwas, dass man sagen kann.
            Dim Texte As New Stack(Of String)
            For I = 0 To KI_Texte.Count - 1
                Dim KOID As String = KI_Texte(I).Split("|")(1)
                If KOID = "ALLE" Or KOID = Spieler.KOS(0).KOID Or KOID = "" Then
                    Texte.Push(KI_Texte(I))
                End If
            Next
            Dim ind As Integer = Spieletools.Zufallszahl(0, Texte.Count - 1)
            Dim Satz As String = Texte(ind).Split("|")(0)
            Sprechen(Satz, Spieler, ObjektKOTextZeile.KOGesichtsAusdruck.Lachend)
        End If
    End Sub
    Public Shared Sub Niederlage(ByVal Spieler As ObjektSpieler)
        Dim KI_Texte As Stack(Of String) = KI_Niederlage
        If KI_Texte.Count > 0 Then
            'immerhin gibt es etwas, dass man sagen kann.
            Dim Texte As New Stack(Of String)
            For I = 0 To KI_Texte.Count - 1
                Dim KOID As String = KI_Texte(I).Split("|")(1)
                If KOID = "ALLE" Or KOID = Spieler.KOS(0).KOID Then
                    Texte.Push(KI_Texte(I))
                End If
            Next
            Dim ind As Integer = Spieletools.Zufallszahl(0, Texte.Count - 1)
            Dim Satz As String = Texte(ind).Split("|")(0)
            Sprechen(Satz, Spieler, ObjektKOTextZeile.KOGesichtsAusdruck.Traurig)
        End If
    End Sub
    Public Shared Sub Spotten(ByVal Spieler As ObjektSpieler)
        Dim KI_Texte As Stack(Of String) = KI_Spott
        If KI_Texte.Count > 0 Then
            'immerhin gibt es etwas, dass man sagen kann.
            Dim Texte As New Stack(Of String)
            For I = 0 To KI_Texte.Count - 1
                Dim KOID As String = KI_Texte(I).Split("|")(1)
                If KOID = "ALLE" Or KOID = Spieler.KOS(0).KOID Then
                    Texte.Push(KI_Texte(I))
                End If
            Next
            Dim ind As Integer = Spieletools.Zufallszahl(0, Texte.Count - 1)
            Dim Satz As String = Texte(ind).Split("|")(0)
            Sprechen(Satz, Spieler, ObjektKOTextZeile.KOGesichtsAusdruck.Normal)
        End If
    End Sub
    Public Shared Sub Betteln(ByVal Spieler As ObjektSpieler)
        Dim KI_Texte As Stack(Of String) = KI_Betteln
        If KI_Texte.Count > 0 Then
            'immerhin gibt es etwas, dass man sagen kann.
            Dim Texte As New Stack(Of String)
            For I = 0 To KI_Texte.Count - 1
                Dim KOID As String = KI_Texte(I).Split("|")(1)
                If KOID = "ALLE" Or KOID = Spieler.KOS(0).KOID Then
                    Texte.Push(KI_Texte(I))
                End If
            Next
            Dim ind As Integer = Spieletools.Zufallszahl(0, Texte.Count - 1)
            Dim Satz As String = Texte(ind).Split("|")(0)
            Sprechen(Satz, Spieler, ObjektKOTextZeile.KOGesichtsAusdruck.Normal)
        End If
    End Sub
    Public Shared Sub Freude(ByVal Spieler As ObjektSpieler)
        Dim KI_Texte As Stack(Of String) = KI_Freude
        If KI_Texte.Count > 0 Then
            'immerhin gibt es etwas, dass man sagen kann.
            Dim Texte As New Stack(Of String)
            For I = 0 To KI_Texte.Count - 1
                Dim KOID As String = KI_Texte(I).Split("|")(1)
                If KOID = "ALLE" Or KOID = Spieler.KOS(0).KOID Then
                    Texte.Push(KI_Texte(I))
                End If
            Next
            Dim ind As Integer = Spieletools.Zufallszahl(0, Texte.Count - 1)
            Dim Satz As String = Texte(ind).Split("|")(0)
            Sprechen(Satz, Spieler, ObjektKOTextZeile.KOGesichtsAusdruck.Lachend)
        End If
    End Sub
    Public Shared Sub Trauer(ByVal Spieler As ObjektSpieler)
        Dim KI_Texte As Stack(Of String) = KI_Trauer
        If KI_Texte.Count > 0 Then
            'immerhin gibt es etwas, dass man sagen kann.
            Dim Texte As New Stack(Of String)
            For I = 0 To KI_Texte.Count - 1
                Dim KOID As String = KI_Texte(I).Split("|")(1)
                If KOID = "ALLE" Or KOID = Spieler.KOS(0).KOID Then
                    Texte.Push(KI_Texte(I))
                End If
            Next
            Dim ind As Integer = Spieletools.Zufallszahl(0, Texte.Count - 1)
            Dim Satz As String = Texte(ind).Split("|")(0)
            Sprechen(Satz, Spieler, ObjektKOTextZeile.KOGesichtsAusdruck.Traurig)
        End If
    End Sub

    Private Shared Sub Sprechen(ByVal Text As String, ByVal Spieler As ObjektSpieler, ByVal Gesichtsausdruck As ObjektKOTextZeile.KOGesichtsAusdruck)
        If TypeOf Objektverwalter.Menue Is ObjektSpielMenue Then
            Dim Spielmenue As ObjektSpielMenue = Objektverwalter.Menue
            Spielmenue.Spielmodus = ObjektSpielMenue.Spielmodi.Nichts
            ObjektKODialog.NeuerDialog(New ObjektKODialog.KOText() {New ObjektKODialog.KOText(Spieler.KOS(0).Bild, Text, Spieler.Spieler, Gesichtsausdruck)}, , ObjektKODialog.NaechsteAktionen.Keine)
        End If
    End Sub
    ''' <summary>
    ''' Laesst die KI Sprechen
    ''' </summary>
    ''' <param name="KILaune"></param>
    ''' <remarks></remarks>
    Public Shared Sub KISprechen(ByVal KILaune As KILaunen, ByVal Spieler As ObjektSpieler)
        If Spieler.KIStufe <> ObjektSpieler.KIStufen.Mensch Then
            If DataSettings.KITexte > 0 Then
                If Zufallszahl(1, 100) <= DataSettings.KITexte Then
                    If DataSettings.KonsolenSpielBefehle Then
                        Konsole.Write("The AI wants to speek to us.")
                    End If
                    Select Case KILaune
                        Case KILaunen.Freude
                            Select Case Zufallszahl(0, 2)
                                Case 0
                                    Sieg(Spieler)
                                Case 1
                                    Spotten(Spieler)
                                Case 2
                                    Freude(Spieler)
                            End Select
                        Case KILaunen.Trauer
                            Select Case Zufallszahl(0, 2)
                                Case 0
                                    Niederlage(Spieler)
                                Case 1
                                    Betteln(Spieler)
                                Case 2
                                    Trauer(Spieler)
                            End Select
                    End Select
                End If
            End If
        End If
    End Sub
End Class
